package Controle;

import Modelo.Usuario;
import Servico.UsuarioService;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.ListDataModel;
import util.FabricaDeObjetos;

public class UsuarioMB {

    private static UsuarioService usuarioService;

    static {
        try {
            usuarioService = (UsuarioService) FabricaDeObjetos.getObjetoUnico(UsuarioService.class);
        } catch (Exception e) {
            Logger.getLogger(UsuarioService.class.getName()).log(Level.SEVERE, null, e);
        }
    }

    private Usuario usuarioCorrente;

    private Usuario usuarioConsulta = new Usuario();

    private List<Usuario> resultadoConsulta;

    private ListDataModel listDataModel;

    public void incluir() {

        try {

            usuarioService.incluir(usuarioCorrente);

            addFacesMessage("Usuario " + usuarioCorrente.getNome() + " incluido com sucesso!");

        } catch (Exception e) {
            addFacesMessage(e.getMessage());
        }
    }

    public String prepararInclusao() {
        
        usuarioCorrente = new Usuario();
        
        return "INCLUIR";
    }

    public String voltarInclusao() {
        return "VOLTAR_INCLUSAO";
    }

    public String voltarConsulta() {
        return "VOLTAR_CONSULTA";
    }

    public String consultar() {

        try {

            if (resultadoConsulta == null) {
                resultadoConsulta = new ArrayList<Usuario>();
            }

            resultadoConsulta =  usuarioService.consultar(usuarioConsulta);

            listDataModel = new ListDataModel(resultadoConsulta);

            return "CONSULTAR";

        } catch (Exception e) {
            addFacesMessage(e.getMessage());
        }

        return null;
        
    }

    public String preparaEdicao() {

        usuarioCorrente = (Usuario) listDataModel.getRowData();

        return "EDITAR";
    }

    public String voltarEdicao() {

        usuarioCorrente = new Usuario();
        
        return "VOLTAR_EDICAO";
    }

    public void editar() {
        
        usuarioService.editar(usuarioCorrente);

        addFacesMessage("Usuario atualizado com sucesso!");
    }

    public String remover() {

        Usuario usuarioRemover = (Usuario) listDataModel.getRowData();

        usuarioService.remover(usuarioRemover);

        resultadoConsulta.remove(usuarioRemover);

        addFacesMessage("Usuario excluido com sucesso!");

        return "REMOVER";
    }

    public String limparCamposConsulta() {
        
        usuarioConsulta = new Usuario();

        return "LIMPAR";
    }

    public void addFacesMessage(String message) {
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(message, null));
    }

    private boolean isBlank(String str) {
        return (str == null) || (str.trim().equals(""));
    }

    public Usuario getUsuarioCorrente() {
        return usuarioCorrente;
    }

    public void setUsuarioCorrente(Usuario usuarioCorrente) {
        this.usuarioCorrente = usuarioCorrente;
    }

    public ListDataModel getListDataModel() {
        return listDataModel;
    }

    public void setListDataModel(ListDataModel listDataModel) {
        this.listDataModel = listDataModel;
    }

    public List<Usuario> getResultadoConsulta() {
        return resultadoConsulta;
    }

    public void setResultadoConsulta(List<Usuario> resultadoConsulta) {
        this.resultadoConsulta = resultadoConsulta;
    }

    public UsuarioService getUsuarioService() {
        return usuarioService;
    }

    public void setUsuarioService(UsuarioService usuarioService) {
        this.usuarioService = usuarioService;
    }

    public Usuario getUsuarioConsulta() {
        return usuarioConsulta;
    }

    public void setUsuarioConsulta(Usuario usuarioConsulta) {
        this.usuarioConsulta = usuarioConsulta;
    }
}
